/* 
    给定一个只包括 '('，')'，'{'，'}'，'['，']' 的字符串 s ，判断字符串是否有效。

    有效字符串需满足：
    左括号必须用相同类型的右括号闭合。
    左括号必须以正确的顺序闭合。
*/
{
    /**
    * 1.新建一个栈
    * 2.遍历字符串，遇到左括号入栈，遇到和栈顶括号类型匹配的右括号就出栈，类型不匹配直接判定为不合法，结束！
    * 3.最后栈空了就合法，否则不合法。
     * @param {*} s 
     * @returns 
     */
  var isValid = function (s) {
    let len = s.length;
    // 长度为奇数一定不满足
    if (len % 2) return false;
    let stack = [];
    for (let i = 0; i < len; i++) {
      let char = s.charAt(i);
      if (char === "(" || char === "{" || char === "[") {
        stack.push(char);
      } else {
        const top = stack[stack.length - 1];
        if (
          (char === ")" && top === "(") ||
          (char === "}" && top === "{") ||
          (char === "]" && top === "[")
        ) {
          stack.pop();
        } else {
          return false;
        }
      }
    }
    return stack.length === 0;
  };

  const s = "()[]{}";
  //   const s = "([)]";
  console.log(isValid(s));
}
